/*****************************************************************************************
 * ETS
 * 
 * Cours:		LOG121
 * Session:		A2013
 * Groupe:		04
 * Projet:		Laboratoire #4
 * Etudiants:	Frederic-Simon Mimeault
 * 				Francisco Felipe Quilodran
 * 				Guillaume Longtin
 * 				William Proulx
 * 
 * Professeur:	Francis Cardinal
 * 
 * Fichier:		Figure.java
 *
 * Date de creation:	2013-11-23
 * Date dern. modif.:	2013-11-25
 * ****************************************************************************************
 * Historique des modifications
 * ****************************************************************************************
 * 2013-11-23 Version initiale
 *****************************************************************************************/

package modele;

import java.util.Observable;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import javax.imageio.ImageIO;

/**
 * Cette classe est le modèle Figure qui représente une image.
 * Elle hérite de la classe Observable pour permettre de notifier la vue d'un changement.
 * C'est le patron de conception Observateur qui est mis en place dans cette classe.
 * @author Guillaume Longtin
 */
public class Figure extends Observable {
	
	private BufferedImage image;
	private String path;
	private Perspective perspective;
	
	/**
	 * Constructeur de la classe Figure qui construit une figure avec l'image du path.
	 * @param path
	 * @throws IOException
	 */
	public Figure(String path) throws IOException {

		this.image = ImageIO.read(new File(path));
		this.path = path;
		
	}
	
	/**
	 * Accesseur qui retourne la figure (l'image).
	 * @return
	 */
	public BufferedImage getImg() {
		
		return image;
		
	}
	
	/**
	 * Accesseur qui retourne la perspective de la figure.
	 * @return the perspective
	 */
	public Perspective getPerspective() {
		
		return perspective;
		
	}
	 
	/**
	 * Mutateur qui modifie la perspective de la figure avec celle reçue en paramètre.
	 * @param perspective the perspective to set
	 */
	public void setPerspective(Perspective perspective) {
		
		this.perspective = perspective;
		
	}
	
	/**
	 * Accesseur qui retourne le path de l'image de la figure.
	 * @return
	 */
	public String getPath() {
		
		return this.path;
		
	}
	
	/**
	 * Mutateur qui modifie l'image de la figure avec celle trouvée par le nouveau path.
	 * @param path
	 * @throws IOException
	 */
	public void setImage(String path) throws IOException {
		
		this.image = ImageIO.read(new File(path));
		this.setChanged();
		this.path = path;
		this.notifyObservers(image);
		
    }
	
}
